package Interfaces;
import HLW;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import IA.Accion;
import IA.Estado;
import IA.MinMax;
import Motor.Carta;
import Motor.Juego;


public class PantallaPillz extends Canvas{
	
	Display display;
	Juego j;
	int turno,fase;
	
	double porcentX=(double)getWidth()/240;
	double porcentY=(double)getHeight()/320;
	
	int puntero=0;
	Figura[] almacen;
	Figura[] recuadros;
	int pillz=0;
	int myPillz;
	private int mode=0;
	
	public PantallaPillz(Display display,Juego j){
		this.display=display;
		this.j=j;
		this.myPillz=j.getJugador()[turno].getPillz();
		almacen=new Figura[3];		
		almacen[0]=new Figura((int)((48.0/240.0)*getWidth()),
				  (int)((30.0/320.0)*getHeight()),
				  (int)(144*porcentX),
				  (int)(46*porcentY));
		almacen[1]=new Figura((int)((48.0/240.0)*getWidth()),
	  			  (int)((162.0/320.0)*getHeight()),
				  (int)(144*porcentX),
				  (int)(46*porcentY));
		almacen[2]=new Figura((int)((165.0/240.0)*getWidth()),
				  (int)((290.0/320.0)*getHeight()),
				  (int)(75*porcentX),
				  (int)(19*porcentY));
		recuadros=new Figura[2];
		recuadros[0]=new Figura((int)((87.0/240.0)*getWidth()),
				  (int)((81.0/320.0)*getHeight()),
				  (int)(66*porcentX),
				  (int)(66*porcentY));
		recuadros[1]=new Figura((int)((87.0/240.0)*getWidth()),
	  			  (int)((213.0/320.0)*getHeight()),
				  (int)(66*porcentX),
				  (int)(66*porcentY));
	}
	
	void setTurno(int t){
		turno=t;
	}
	
	void setFase(int f){
		fase=f;
	}
	
	void resetPillz(){
		pillz=0;
	}
	
	protected void paint(Graphics g) {
		
		// TODO Auto-generated method stub
		g.setColor(0, 0, 0);
		g.fillRect(0, 0, getWidth(), getHeight());
		
		porcentX=(double)getWidth()/240;
		porcentY=(double)getHeight()/320;
		
		//Pintamos todos los elementos de la pantalla
		
		g.setColor(255, 255, 255);
		int i=0;
		while (i<recuadros.length){
			g.fillRect(recuadros[i].getX(), recuadros[i].getY(), recuadros[i].getAncho(), recuadros[i].getAlto());
			i++;
		}
		g.setColor(255, 0, 0);
		Font f=Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE);
		g.setFont(f);
		g.drawString(""+j.getJugador()[turno].getPillz(),
				recuadros[0].getX()+recuadros[0].getAncho()/2,
				recuadros[0].getY()+recuadros[0].getAlto()/2,
				(Graphics.BASELINE|Graphics.HCENTER));
		
		g.setColor(0, 255, 0);
		g.drawString(""+pillz,
				recuadros[1].getX()+recuadros[1].getAncho()/2,
				recuadros[1].getY()+recuadros[1].getAlto()/2,
				(Graphics.BASELINE|Graphics.HCENTER));
		
		
		Image im;
		try{
			im=Image.createImage("/Imagenes/BotonAnadir.png");
			im=Carta.scaleImage(im,almacen[0].getAncho(),almacen[0].getAlto());
			g.drawImage(im,
					almacen[0].getX(),
					almacen[0].getY(),
					(Graphics.TOP|Graphics.LEFT));
		}catch(Exception e){}
		try{
			im=Image.createImage("/Imagenes/BotonQuitar.png");
			im=Carta.scaleImage(im,almacen[1].getAncho(),almacen[1].getAlto());
			g.drawImage(im,
					almacen[1].getX(),
					almacen[1].getY(),
					(Graphics.TOP|Graphics.LEFT));
		}catch(Exception e){}
		try{
			im=Image.createImage("/Imagenes/PCU.png");
			im=Carta.scaleImage(im,almacen[2].getAncho(),almacen[2].getAlto());
			g.drawImage(im,
					almacen[2].getX(),
					almacen[2].getY(),
					(Graphics.TOP|Graphics.LEFT));
		}catch(Exception e){}
		
		//dibujamos la seleccion
		g.setColor(255,255,0);
		g.setStrokeStyle(Graphics.DOTTED);
		g.drawRect(almacen[puntero].getX()-2, almacen[puntero].getY()-2,
				almacen[puntero].getAncho()+4, almacen[puntero].getAlto()+4);
		
		//ESCRIBIMOS EN LA PARTE INFERIOR DE LA PANTALLA FASE Y TURNO
		Font font=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN ,Font.SIZE_MEDIUM);
		g.setFont(font);
		g.setColor(0, 255, 255);
		String s= "FASE: "+fase+"   TURNO: "+turno+"      ";
		g.drawString(s,
				(int)((0.0/240.0)*getWidth()),
				(int)((295.0/320.0)*getHeight()), 
				Graphics.TOP|Graphics.LEFT);
	}
	
	protected void keyPressed(int kC){
		if (kC==-1){
			if(puntero>0){puntero--;}
			repaint();
		}else if(kC==-2){
			if(puntero<almacen.length-1){puntero++;}
			repaint();
		}else if(kC==-5){
			if (puntero==0){
				if (j.getJugador()[turno].getPillz()!=0){
					j.getJugador()[turno].setPillz(j.getJugador()[turno].getPillz() - 1);
					pillz++;
				}
				repaint();
			}else if(puntero==1){
				if (j.getJugador()[turno].getPillz()!=myPillz){
					j.getJugador()[turno].setPillz(j.getJugador()[turno].getPillz() + 1);
					pillz--;
				}
				repaint();
			}else if(puntero==2){
				j.getLuchador()[turno].setPillz(pillz);
				resetPillz();
				if (mode==0){
					if (turno==0){
						HLW.pP.setTurno(turno+1);
						HLW.pP.setFullScreenMode(true);
						display.setCurrent(HLW.pP);
					}else{
						HLW.pCom.setTurno(0);
						HLW.pCom.setFase(fase+1);
						HLW.pCom.setMode(mode);
						HLW.pCom.setFullScreenMode(true);
						display.setCurrent(HLW.pCom);
					}
				}else if (mode==1){
					//avanzo instante de juego
					turno = (turno + 1) % 2;
					if (turno == 0) {
						fase++;
					}
					//llamo a la IA
					Estado e= new Estado(j, fase, turno);
					e=e.copiar();
					MinMax m=new MinMax(9);
					Accion c=m.minMax(turno,e);
					e=e.applyAction(c,turno);
					//actualizamos valores
					turno = e.getTurno();
					fase=e.getFase();
					j.setJugador(e.getJugador());
					j.setLuchador(e.getLuchador());	
					HLW.pCom.setTurno(turno);
					HLW.pCom.setFase(fase);
					HLW.pCom.setMode(mode);
					HLW.pCom.setJuego(j);
					HLW.pCom.setFullScreenMode(true);
					display.setCurrent(HLW.pCom);
				}
			}
		}
	}
	
	protected void pointerPressed(int _x, int _y){
		int aux=0;
		boolean b=false;
		while(!b && aux<almacen.length ){
			b=almacen[aux].pertenece(_x, _y);
			aux++;
		}
		if(b){
			aux--;
			if (aux==0){
				if (j.getJugador()[turno].getPillz()!=0){
					j.getJugador()[turno].setPillz(j.getJugador()[turno].getPillz() - 1);
					pillz++;
				}
				repaint();
			}else if(aux==1){
				if (j.getJugador()[turno].getPillz()!=myPillz){
					j.getJugador()[turno].setPillz(j.getJugador()[turno].getPillz() + 1);
					pillz--;
				}
				repaint();
			}else if(aux==2){
				j.getLuchador()[turno].setPillz(pillz);
				resetPillz();
				if (mode==0){
					if (turno==0){
						HLW.pP.setTurno(turno+1);
						HLW.pP.setFullScreenMode(true);
						display.setCurrent(HLW.pP);
					}else{
						HLW.pCom.setTurno(0);
						HLW.pCom.setFase(fase+1);
						HLW.pCom.setMode(mode);
						HLW.pCom.setFullScreenMode(true);
						display.setCurrent(HLW.pCom);
					}
				}else if (mode==1){
					//avanzo instante de juego
					turno = (turno + 1) % 2;
					if (turno == 0) {
						fase++;
					}
					//llamo a la IA
					Estado e= new Estado(j, fase, turno);
					e=e.copiar();
					MinMax m=new MinMax(9);
					Accion c=m.minMax(turno,e);
					e=e.applyAction(c,turno);
					//actualizamos valores
					turno = e.getTurno();
					fase=e.getFase();
					j.setJugador(e.getJugador());
					j.setLuchador(e.getLuchador());	
					HLW.pCom.setTurno(turno);
					HLW.pCom.setFase(fase);
					HLW.pCom.setMode(mode);
					HLW.pCom.setJuego(j);
					HLW.pCom.setFullScreenMode(true);
					display.setCurrent(HLW.pCom);
				}
			}
		}
		repaint();
	}

	public int getMode() {
		return mode;
	}

	public void setMode(int mode) {
		this.mode = mode;
	}

	public void setJuego(Juego j2) {
		// TODO Auto-generated method stub
		j=j2;
	}
}
